GPS loggers are not the same for successful and failed breeders so they have to be processed differently before being merged. Moreover, data from 2015 and 2018 have different formats and different constraints so they are also processed separately. This file aims at formatting the data and compare results for 2015 when cleaning trips based on different threshold parameters.

Bird data import for 2015

Import data for successful breerders

Loggers deployed on successful breeders are IgotU GPS. They give LOCAL TIME in UTC (GMT+5) and record locations every 5 minutes.

library(fields)
library(maptools)
library(maps)
library(stringr)
library(xlsx)
library(plotrix)
library(pastecs)
library(kableExtra)
library(plyr)
library(lme4)
library(simr)
source("R scripts/Functions.R")

#Coordinates of the colony
colony<-data.frame(Longitude =77.52356,Latitude=-37.8545)

##Import data for successful birds (classical GPS)
success.2015<-read.table("RawData/ams_yna_2015-16_gps_success.txt",header=T,sep="\t")
success.2015$Status<-as.factor("success")
success.2015$DateTime<-as.POSIXct(paste(strptime(success.2015$Date,format="%d/%m/%Y"),
                                        success.2015$Time,sep=" "),tz="")
success.2015<-success.2015[,c("Logger.ID","Status","DateTime","Longitude","Latitude","Speed","Altitude")]

#distance between location and colony
success.2015$Distmax<-as.vector(rdist.earth(success.2015[,c("Longitude","Latitude")],
                                       colony[1,c("Longitude","Latitude")],miles=F))  
names(success.2015)[1]<-"ID"
success.2015$Distadj<-0
success.2015$Difftime<-0

#calculate distance between 2 consecutive points and time elapsed between 2 consecutive points
for ( n in 2:nrow(success.2015)){
  success.2015$Distadj[n]<-rdist.earth(success.2015[n,c("Longitude","Latitude")],
                                  success.2015[n-1,c("Longitude","Latitude")],miles=F)
   success.2015$Difftime[n]<-difftime(success.2015$DateTime[n],success.2015$DateTime[n-1],units="mins")
}

#remove time difference when changing individuals
success.2015$Difftime[which(success.2015$Difftime<0)]<-0

Import data for failed breeders

Loggers deployed on failed breeders are GPS-UHF Ecotone. They give time in GMT so 5h have to be added to obtain local time (UTC=GMT+5).They record locations every 5-15 minutes, depending on weather conditions. They provide more gaps in the data

##Import data for failed birds (GPS-UHF)
fail.2015<-read.table("RawData/ams_yna_2015-16_gps_fail.txt",header=T,sep="\t")
fail.2015$Date<-paste(fail.2015$Year,fail.2015$Month,fail.2015$Day,sep="/")
fail.2015$Time<-paste(fail.2015$Hour,fail.2015$Minute,fail.2015$Second,sep=":")
fail.2015$Status<-as.factor("fail")
fail.2015$DateTime<-as.POSIXct(paste(strptime(fail.2015$Date,format="%Y/%m/%d"),fail.2015$Time,sep=" "),tz="UTC") 
fail.2015$DateTime<-fail.2015$DateTime + 5*3600
fail.2015<-fail.2015[,c("Logger.ID","Status","DateTime","Longitude","Latitude","Speed","Altitude","In.range")]

#when "in.range" is true, locations are set to colony coordinates
fail.2015$Longitude[which(is.na(fail.2015$Longitude)==T & fail.2015$In.range==1)]<-colony$Longitude   
fail.2015$Latitude[which(is.na(fail.2015$Latitude)==T & fail.2015$In.range==1)]<-colony$Latitude 
fail.2015<-fail.2015[!is.na(fail.2015$Latitude)==T,]

#distance between location and colony
fail.2015$Distmax<-NA
fail.2015$Distmax<-as.vector(rdist.earth(fail.2015[,c("Longitude","Latitude")],
                                         colony[1,c("Longitude","Latitude")],miles=F))
fail.2015$Distmax[fail.2015$In.range==1]<-0
names(fail.2015)[1]<-"ID"
fail.2015<-fail.2015[,-8]
fail.2015$Distadj<-0

#calculate distance between 2 consecutive points and time elapsed between 2 consecutive points
fail.2015$Difftime<-0
for (n in 2:nrow(fail.2015)){
  fail.2015$Distadj[n]<-rdist.earth(fail.2015[n,c("Longitude","Latitude")],
                               fail.2015[n-1,c("Longitude","Latitude")],miles=F)
  fail.2015$Difftime[n]<-difftime(fail.2015$DateTime[n],fail.2015$DateTime[n-1],units="mins")
}
fail.2015$Difftime[which(fail.2015$Difftime<0)]<-0

Merge data 2015, define trips and clean trips.

Parameters to define a trip are based on distance to the colony, number of locations out of the colony and duration. They are different for data from 2015 to account for duty cycles in loggers tracking successful breeders in 2018.

dataset.2015<-rbind(success.2015,fail.2015)
dataset.2015<-dataset.2015[duplicated(dataset.2015$DateTime)==FALSE,] # remove duplicated points with the same date and time
datasetTravelNb<-"NA"
dataset.2015$PathLength<-0

dist.thres<-1             #distance threshold (in km)
last.dist<-10           #distance threshold (in km) when having only one location between 2 trips
row.thres<- 12               #number of rows constituting a trip (corresponding to minimum 1h)
dur.thres<-120         #min duration of a trip
diff.thres<-360     #max difftime in a trip
date.max<-as.POSIXct("2015-12-22 12:00:00", format="%F %H:%M:%S",tz="UTC") 


#Define trip number within each individual
ALL.2015<-define_trips(dataset.2015)   #function from source file

#summarize raw trips by individuals or status
dist.max.all.trips.2015.ind<-raw_trips_summary_ind(ALL.2015)    #function from source file
dist.max.all.trips.2015.status<-raw_trips_summary_status(ALL.2015)  #function from source file

#clean trips and give summary by individuals or status
summary.clean.trips.2015.ind<-clean_trips_summary_ind(ALL.2015)    #function from source file
summary.clean.trips.2015.status<-clean_trips_summary_status(ALL.2015)    #function from source file


#clean trips and give locations of selected trips
clean.trips.loc.2015<-clean_trips_locations(ALL.2015)

Summary of raw trips by status

The first table shows the summary of trip characteristics with raw data. The second one shows the summary of trip characteristics with a minimum distance of 1km, a minimum duration of 120, gaps of less than 360 and a minimum of 12 number of locations to define a trip.

Status NbInd NbTravel MeanDist SDDist MinDist MaxDist MeanDur SDDur MinTripDur MaxTripDur MinmaxDiff MaxmaxDiff MeanTotPath MinTotPath MaxTotPath
success 8 24 340.4639 39.92386 155.250865 852.6335 52.79950 6.405953 17.417778 171.0675 0.1633333 0.6908333 1098.5590 407.3176 3205.429
fail 13 35 460.4098 64.12813 0.234768 1229.8146 83.69254 12.720925 3.783333 339.7928 0.1833333 94.5166667 898.4941 0.0000 3473.809
Status NbInd NbTravel MeanDist SDDist MinDist MaxDist MeanDur SDDur MinTripDur MaxTripDur MinmaxDiff MaxmaxDiff MeanTotPath MinTotPath MaxTotPath
success 8 23 336.4499 41.48781 155.2509 852.6335 53.51965 6.648387 17.417778 171.0675 0.1633333 0.6908333 1106.5136 407.31755 3205.429
fail 11 21 420.9659 86.16949 28.6290 1229.8146 60.63340 11.501622 3.783333 163.0244 0.2666667 5.3666667 732.1894 58.46149 2313.828

Plots of trips by individuals

In the plots, all black dots represent trips/data that have been excluded. All colored trips are the selected ones.

Interpolation of clean trips

 reso <- 10 * 60       #time resolution between 2 points in seconds

new.trip<-NULL
loc.interpolated.2015<-NULL
id<-unique(clean.trips.loc.2015$ID)

 #interpolate data for each individual separately 
for (x in 1:length(id)){
  sub<-subset(clean.trips.loc.2015,clean.trips.loc.2015$ID==id[x])
  trip<-unique(sub$TravelNb)

   #interpolate data for each trip separately 
  for (y in 1:length(trip)){
    sub.trip<-subset(sub,sub$TravelNb==trip[y])
    sub.trip$TimeSinceOrigin<-rep(0,nrow(sub.trip))

  for (z in 1:nrow(sub.trip)){
    sub.trip$TimeSinceOrigin[z]<-difftime(sub.trip$DateTime[z],sub.trip$DateTime[1],units="sec")
  }

 
  # Resampling of long and lat with regular time intervals 
  sub.lat1 <- regul(x=sub.trip$TimeSinceOrigin, y=sub.trip$Latitude,
                    n=round((max(sub.trip$TimeSinceOrigin)/reso),0),
                    deltat=reso, methods="linear",xmin=0,units="sec")
  sub.lon1 <- regul(x=sub.trip$TimeSinceOrigin, y=sub.trip$Longitude,
                    n=round((max(sub.trip$TimeSinceOrigin)/reso),0),
                    deltat=reso, methods="linear",xmin=0,units="sec")

  new.sub <- data.frame(Longitude=sub.lon1[[2]]$Series, Latitude=sub.lat1[[2]]$Series, Time=as.vector(sub.lon1[[1]]),
                        DateTime=sub.trip$DateTime[1]+as.vector(sub.lon1[[1]]),TravelNb=trip[y])

  #Recreate a dataframe with individual and trip characteristics
  new.sub$ID<-id[x]
  new.sub$Status<-rep(unique(sub$Status),nrow(new.sub))
  new.sub$Distmax<-as.vector(rdist.earth(new.sub[,c("Longitude","Latitude")],
                                         colony[1,c(1,2)],miles=F))
  new.sub$Difftime<-c(0,difftime(new.sub$DateTime[2:nrow(new.sub)],new.sub$DateTime[1:nrow(new.sub)-1],units="mins"))
  new.sub$Distadj<-0

  for (z in 2:nrow(new.sub)){
    new.sub$Distadj[z]<-rdist.earth(new.sub[z,c("Longitude","Latitude")],
                                    new.sub[z-1,c("Longitude","Latitude")], miles=F)
  }

 new.trip<-rbind(new.trip,new.sub)
  }
}

#create a new global dataset with interpolated data
loc.interpolated.2015<-new.trip[,c("ID","Status","TravelNb","DateTime","Longitude","Latitude",
                                   "Distmax","Difftime","Distadj")]

#save(loc.interpolated.2015,file="NewlyCreatedData/clean_interp_loc_2015.RData")


summary.trips.interp1<-ddply(loc.interpolated.2015,.(ID,Status,TravelNb),summarize,DistmaxIndTrip=max(Distmax),
                             TripDurIndTrip=sum(Difftime)/60,TotPathIndTrip=sum(Distadj))

summary.trips.interp2<-ddply(summary.trips.interp1,.(ID,Status),summarize,NbTrips=length(DistmaxIndTrip),
                             DistmaxInd=mean(DistmaxIndTrip),
                             TripDurInd=mean(TripDurIndTrip),TotPathInd=mean(TotPathIndTrip))

summary.trips.interp<-ddply(summary.trips.interp2,.(Status),summarize,
                            NbTrip=mean(NbTrips),NbTripSE=std.error(NbTrips,na.rm=T),
                            Distmax=mean(DistmaxInd),DistmaxSE=std.error(DistmaxInd,na.rm=T),
                            TripDur=mean(TripDurInd),TripDurSE=std.error(TripDurInd,na.rm=T),
                            TotPath=mean(TotPathInd),TotPathSE=std.error(TotPathInd,na.rm=T))

Summary of clean interpolated trips by status

The table shows the summary of trip characteristics with interpolated data from clean trips with a minimum distance of 1km, a minimum duration of 120, gaps of less than 360 and a minimum of 12 number of locations to define a trip with a time resolution of 600 for interpolation.

Status NbTrip NbTripSE Distmax DistmaxSE TripDur TripDurSE TotPath TotPathSE
success 3.000000 0.3779645 375.9784 47.55268 57.05174 10.02957 1187.30 202.4147
fail 1.916667 0.3785605 481.4227 105.06258 67.54514 14.82000 1332.87 275.4427

Statistics

Linear mixed models are applied to test whether the trip variables are different between failed and successful breeders as well as power analyses.

## Analysis of Variance Table
##        npar Sum Sq Mean Sq F value
## Status    1 3.5706  3.5706  0.1216
## Analysis of Variance Table
##        npar    Sum Sq   Mean Sq F value
## Status    1 0.0011549 0.0011549   2e-04
## Analysis of Variance Table
##        npar  Sum Sq Mean Sq F value
## Status    1 0.98179 0.98179  0.0098
## Simulating: |                                                                  |Simulating: |=                                                                 |Simulating: |==                                                                |Simulating: |===                                                               |Simulating: |====                                                              |Simulating: |=====                                                             |Simulating: |======                                                            |Simulating: |=======                                                           |Simulating: |========                                                          |Simulating: |=========                                                         |Simulating: |==========                                                        |Simulating: |===========                                                       |Simulating: |============                                                      |Simulating: |=============                                                     |Simulating: |==============                                                    |Simulating: |===============                                                   |Simulating: |================                                                  |Simulating: |=================                                                 |Simulating: |==================                                                |Simulating: |===================                                               |Simulating: |====================                                              |Simulating: |=====================                                             |Simulating: |======================                                            |Simulating: |=======================                                           |Simulating: |========================                                          |Simulating: |=========================                                         |Simulating: |==========================                                        |Simulating: |===========================                                       |Simulating: |============================                                      |Simulating: |=============================                                     |Simulating: |==============================                                    |Simulating: |===============================                                   |Simulating: |================================                                  |Simulating: |=================================                                 |Simulating: |==================================                                |Simulating: |===================================                               |Simulating: |====================================                              |Simulating: |=====================================                             |Simulating: |======================================                            |Simulating: |=======================================                           |Simulating: |========================================                          |Simulating: |=========================================                         |Simulating: |==========================================                        |Simulating: |===========================================                       |Simulating: |============================================                      |Simulating: |=============================================                     |Simulating: |==============================================                    |Simulating: |===============================================                   |Simulating: |================================================                  |Simulating: |=================================================                 |Simulating: |==================================================                |Simulating: |===================================================               |Simulating: |====================================================              |Simulating: |=====================================================             |Simulating: |======================================================            |Simulating: |=======================================================           |Simulating: |========================================================          |Simulating: |=========================================================         |Simulating: |==========================================================        |Simulating: |===========================================================       |Simulating: |============================================================      |Simulating: |=============================================================     |Simulating: |==============================================================    |Simulating: |===============================================================   |Simulating: |================================================================  |Simulating: |================================================================= |Simulating: |==================================================================|
## Power for predictor 'Status', (95% confidence interval):
##        6.60% ( 5.14,  8.32)
## 
## Test: Likelihood ratio
## 
## Based on 1000 simulations, (1 warning, 0 errors)
## alpha = 0.05, nrow = 47
## 
## Time elapsed: 0 h 2 m 28 s
## 
## nb: result might be an observed power calculation
## Simulating: |                                                                  |Simulating: |=                                                                 |Simulating: |==                                                                |Simulating: |===                                                               |Simulating: |====                                                              |Simulating: |=====                                                             |Simulating: |======                                                            |Simulating: |=======                                                           |Simulating: |========                                                          |Simulating: |=========                                                         |Simulating: |==========                                                        |Simulating: |===========                                                       |Simulating: |============                                                      |Simulating: |=============                                                     |Simulating: |==============                                                    |Simulating: |===============                                                   |Simulating: |================                                                  |Simulating: |=================                                                 |Simulating: |==================                                                |Simulating: |===================                                               |Simulating: |====================                                              |Simulating: |=====================                                             |Simulating: |======================                                            |Simulating: |=======================                                           |Simulating: |========================                                          |Simulating: |=========================                                         |Simulating: |==========================                                        |Simulating: |===========================                                       |Simulating: |============================                                      |Simulating: |=============================                                     |Simulating: |==============================                                    |Simulating: |===============================                                   |Simulating: |================================                                  |Simulating: |=================================                                 |Simulating: |==================================                                |Simulating: |===================================                               |Simulating: |====================================                              |Simulating: |=====================================                             |Simulating: |======================================                            |Simulating: |=======================================                           |Simulating: |========================================                          |Simulating: |=========================================                         |Simulating: |==========================================                        |Simulating: |===========================================                       |Simulating: |============================================                      |Simulating: |=============================================                     |Simulating: |==============================================                    |Simulating: |===============================================                   |Simulating: |================================================                  |Simulating: |=================================================                 |Simulating: |==================================================                |Simulating: |===================================================               |Simulating: |====================================================              |Simulating: |=====================================================             |Simulating: |======================================================            |Simulating: |=======================================================           |Simulating: |========================================================          |Simulating: |=========================================================         |Simulating: |==========================================================        |Simulating: |===========================================================       |Simulating: |============================================================      |Simulating: |=============================================================     |Simulating: |==============================================================    |Simulating: |===============================================================   |Simulating: |================================================================  |Simulating: |================================================================= |Simulating: |==================================================================|
## Power for predictor 'Status', (95% confidence interval):
##        7.50% ( 5.94,  9.31)
## 
## Test: Likelihood ratio
## 
## Based on 1000 simulations, (21 warnings, 0 errors)
## alpha = 0.05, nrow = 47
## 
## Time elapsed: 0 h 2 m 6 s
## 
## nb: result might be an observed power calculation
## Simulating: |                                                                  |Simulating: |=                                                                 |Simulating: |==                                                                |Simulating: |===                                                               |Simulating: |====                                                              |Simulating: |=====                                                             |Simulating: |======                                                            |Simulating: |=======                                                           |Simulating: |========                                                          |Simulating: |=========                                                         |Simulating: |==========                                                        |Simulating: |===========                                                       |Simulating: |============                                                      |Simulating: |=============                                                     |Simulating: |==============                                                    |Simulating: |===============                                                   |Simulating: |================                                                  |Simulating: |=================                                                 |Simulating: |==================                                                |Simulating: |===================                                               |Simulating: |====================                                              |Simulating: |=====================                                             |Simulating: |======================                                            |Simulating: |=======================                                           |Simulating: |========================                                          |Simulating: |=========================                                         |Simulating: |==========================                                        |Simulating: |===========================                                       |Simulating: |============================                                      |Simulating: |=============================                                     |Simulating: |==============================                                    |Simulating: |===============================                                   |Simulating: |================================                                  |Simulating: |=================================                                 |Simulating: |==================================                                |Simulating: |===================================                               |Simulating: |====================================                              |Simulating: |=====================================                             |Simulating: |======================================                            |Simulating: |=======================================                           |Simulating: |========================================                          |Simulating: |=========================================                         |Simulating: |==========================================                        |Simulating: |===========================================                       |Simulating: |============================================                      |Simulating: |=============================================                     |Simulating: |==============================================                    |Simulating: |===============================================                   |Simulating: |================================================                  |Simulating: |=================================================                 |Simulating: |==================================================                |Simulating: |===================================================               |Simulating: |====================================================              |Simulating: |=====================================================             |Simulating: |======================================================            |Simulating: |=======================================================           |Simulating: |========================================================          |Simulating: |=========================================================         |Simulating: |==========================================================        |Simulating: |===========================================================       |Simulating: |============================================================      |Simulating: |=============================================================     |Simulating: |==============================================================    |Simulating: |===============================================================   |Simulating: |================================================================  |Simulating: |================================================================= |Simulating: |==================================================================|
## Power for predictor 'Status', (95% confidence interval):
##        7.90% ( 6.30,  9.75)
## 
## Test: Likelihood ratio
## 
## Based on 1000 simulations, (2 warnings, 0 errors)
## alpha = 0.05, nrow = 47
## 
## Time elapsed: 0 h 2 m 31 s
## 
## nb: result might be an observed power calculation